package org.company.ci.services;

import java.util.ArrayList;

import org.company.ci.daos.ProveedorDao;
import org.company.ci.daos.RelacionProductoProveedorDao;
import org.company.ci.domain.Producto;
import org.company.ci.domain.Proveedor;
import org.company.ci.domain.RelacionProductoProveedor;

public class ProveedorService {
	
	private ProveedorDao proveedorDao;
	
	private RelacionProductoProveedorDao relacionProductoProveedorDao;
	
	public void saveOrUpdateProveedor(Proveedor prov) throws Exception {
		if (prov.getIdProveedor() == null) {
			proveedorDao.saveEntity(prov);
		} else {
			proveedorDao.updateEntity(prov);
		}
	}
	
	private void isUsedProveedor(Proveedor prov) throws Exception {
		RelacionProductoProveedor rel = relacionProductoProveedorDao
				.getBObyLongField(prov.getIdProveedor(), "proveedor.idProveedor");
		if (rel != null) {
			throw new Exception("No se puede eliminar el Proveedor porque esta relacionado con un Producto.");
		}
	}
	
	public Proveedor getProveedorById(Long idProveedor) throws Exception {
		return proveedorDao.getBObyId(idProveedor.toString(), "idProveedor");
	}
	
	public ArrayList<Proveedor> getListProveedores() throws Exception {
		return (ArrayList<Proveedor>)proveedorDao.getAllEntity(" order by nombre");
	}
	
	public void deleteProveedor(Proveedor prov) throws Exception {
		isUsedProveedor(prov);
		proveedorDao.deleteEntity(prov);
	}

	public ProveedorDao getProveedorDao() {
		return proveedorDao;
	}

	public void setProveedorDao(ProveedorDao proveedorDao) {
		this.proveedorDao = proveedorDao;
	}

	public RelacionProductoProveedorDao getRelacionProductoProveedorDao() {
		return relacionProductoProveedorDao;
	}

	public void setRelacionProductoProveedorDao(
			RelacionProductoProveedorDao relacionProductoProveedorDao) {
		this.relacionProductoProveedorDao = relacionProductoProveedorDao;
	}

}
